package com.tao.single_;

public class SingleTon01 {
    public static void main(String[] args) {
//        GirlFriend xh = new GirlFriend("小红");
//        GirlFriend xb = new GirlFriend("小白");
        //以上创建了两个对象实例，这样就不叫单例模式

        //饿汉式：可能会有创造了对象，但是没有使用，可能造成数据的浪费

        //通过调用静态方法获取gf对象
        GirlFriend instance = GirlFriend.getInstance();
        System.out.println(instance);

        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2);

        System.out.println(instance == instance2);
    }
}

class GirlFriend{

    private String name;

    //为了能够在静态方法中，返回 gf 对象，我们加入 static，如果不用static，就不能在静态方法中返回gf对象
    private static GirlFriend gf = new GirlFriend("小红红");//这是私有的，在外面的类用不了，会调用构造器
    //保障我们只能创建一个 GirlFriend 对象：
    //1.将构造器私有化
    //2.在类的内部直接创建对象
    //3.提供一个公共的静态方法，返回 gf 对象

    private GirlFriend(String name) {
        System.out.println("构造器被调用...");
        this.name = name;
    }
    //在加载类的时候会执行static相关代码
    //为的就是在 不在外部创建对象的情况下就调用这个方法
    public static GirlFriend getInstance(){
        return gf;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}